package jvm;

/**
 * @Author: ideaAdmin
 * TODO:
 * Date: 2022/2/12:10:02
 * Description:
 */

public class ClassInit {
    private static int a = 1;


    static {
        a = 2;
        number = 20;
        System.out.println(a);
        //System.out.println(number);//报错 非法的前向引用 因为number的定义在静态代码块的下面 所以这里只能赋值 而不能调用它
    }
    {
        name = "???";
    }
    public String name ;

    private static int number = 10;
    /* TODO:linking阶段时 prepare已经给number设置了默认初始值 这里值是0
            所以静态代码块是可以访问number属性的
            加载的时候是顺序执行的
            首先静态代码块会把number=0  设置为 number = 20
            然后执行到 number = 10 所有number的最终值为10
     */

    public static void main(String[] args) {
        System.out.println(a);//2
        System.out.println(number);//10
    }
}
